package com.zjj.learn.designmodel.work.proxy.jdk;

import java.lang.reflect.Proxy;

public class JdkProxyTest {

    public static void main(String[] args) {
//        MySelf my = new MySelf();
//        my.setContext("我234...");
//        JdkProxyProxy factory = new JdkProxyProxy(my);
//        MySelf mySelf = factory.getObject();
//        mySelf.say();


        System.out.println("******************************");

        MySelf self = new MySelf();
        self.setContext("你好");
        Object instance =  Proxy.newProxyInstance(self.getClass().getClassLoader(),
                self.getClass().getInterfaces(),
                new JdkProxyFactory2(self));

        MySelf mySelf = (MySelf) instance;
        mySelf.say();

        System.out.println("instance = " + instance);
    }


    /**
     * todo 这里目前转化错误
     * 动态代理
     *    从静态代理，代理类需要我们进行手动创建，这样子假设需要很多代理，就需要创建很多。有点不好，所以就有动态代理了
     *    动态代理和静态代理的区别就是静态代理需要提前编写好代理类，但是动态代理可以在程序执行过程中动态的创建代理类。
     *
     * 目前有两种方案可以实现动态代理，分别是
     *    1、jdk 动态代理
     *    2、cglib 动态代理
     **/
}
